/**
 * Copyright (c) 2018 软唐 All rights reserved.
 * <p>
 * https://www.softtown.cn
 * <p>
 * 版权所有，侵权必究！
 */

package com.softtown.modules.sys.service;

import com.softtown.common.service.BaseService;
import com.softtown.modules.sys.dto.RegistDTO;
import com.softtown.modules.sys.dto.SysUserDTO;
import com.softtown.modules.sys.dto.SysUserEmailDTO;
import com.softtown.modules.sys.dto.SysUserMobileDTO;
import com.softtown.modules.sys.entity.SysNoticeEntity;
import com.softtown.modules.sys.entity.SysUserEntity;
import com.softtown.modules.sys.vo.SysUserVO;

import java.util.List;


/**
 * 系统用户
 *
 * @author Ding Ya Yong
 */
public interface SysUserService extends BaseService<SysUserEntity> {

    SysUserDTO getByUsername(String username);

    SysUserDTO getByMobile(String mobile);

    void save(SysUserDTO dto);


    /**
     * 修改密码
     *
     * @param dto
     * @return
     * @author Dingyayong
     * @date 2019/5/29 9:51
     */
    void update(SysUserDTO dto);

    /**
     * saas模式下用户注册
     *
     * @param dto
     * @return
     * @author Dingyayong
     * @date 2019/5/29 9:51
     */
    void register(RegistDTO dto);

    void delete(Long[] ids);

    /**
     * 修改密码
     *
     * @param id          用户ID
     * @param newPassword 新密码
     */
    void updatePassword(Long id, String newPassword);

    /**
     * 根据id，查询用户
     */
    SysUserEntity getByUserId(Long id);


    /**
     * 根据手机，查询用户
     */
    SysUserEntity getEntityByMobile(String mobile);

    /**
     * 根据邮箱，查询用户
     */
    SysUserEntity getEntityByEmail(String email);

    SysNoticeEntity findNotice();

    /**
     * @param @param [sysUserMobileDTO]
     * @return @return void
     * @throws
     * @Title: updateMobileNumber
     * @Description: 用户解绑手机号Service接口
     * @author fuming
     * @date 2019/7/10 22:07
     */
    void updateMobileNumber(SysUserMobileDTO sysUserMobileDTO);

    /**
     * @param @param [sysUserEmailDTO]
     * @return @return void
     * @throws
     * @Title: updateEmail
     * @Description: 用户解绑邮箱Service接口
     * @author fuming
     * @date 2019/7/12 19:35
     */
    void updateEmail(SysUserEmailDTO sysUserEmailDTO);

    /**
     * @param @param [sysUserDTO]
     * @return @return void
     * @throws
     * @Title: updatePersonalInfo
     * @Description: 用户修改个人信息Service接口
     * @author fuming
     * @date 2019/7/12 19:36
     */
    void updatePersonalInfo(SysUserDTO sysUserDTO);


    void updateUserInfo(SysUserEntity sysUserEntity);

    /**
     * @param @param []
     * @return @return java.util.List<com.softtown.modules.sys.vo.SysUserVO>
     * @throws
     * @Title: getSysUserInfos
     * @Description: 查询所有用户信息Service接口
     * @author fuming
     * @date 2019/7/31 11:15
     */
    List<SysUserVO> getSysUserInfos();


    /**
     * 退出时查找用户信息
     *
     * @param id 用户id
     * @return
     * @author Dingyayong
     * @date 2019/11/28 13:22
     */
    SysUserEntity getByUserIdOnLoginOut(Long id);

    /**
     * 根据账号查找用户信息
     *
     * @param
     * @return
     * @author Dingyayong
     * @date 2019/12/5 10:42
     */
    SysUserEntity getUserByAccount(String userName);

    /**
     * 管理员重置
     *
     * @param
     * @return
     * @author Dingyayong
     * @date 2019/12/5 11:05
     */
    void upadteUserInfoBySysUserDTO(SysUserDTO sysUserDTO);

    /**
     * 查询所有系统用户的邮箱账号
     *
     * @param
     * @return java.util.List<java.lang.String>
     * @Author fuming
     * @Date 2020/2/6 13:42
     */
    List<String> selectSysUserEmailList();

    /**
     * 切换语言时，更改用户语言
     * @param language
     */
    void changeUserLanguage(String language);
}
